#include "pluginmanagerwindow.h"
#include "ui_pluginmanagerwindow.h"

PluginManagerWindow::PluginManagerWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::PluginManagerWindow)
{
    ui->setupUi(this);
    setWindowTitle(tr("插件管理器"));
    resize(800, 600);

    // 初始化时加载插件
    loadPlugins();
}

PluginManagerWindow::~PluginManagerWindow()
{
    delete ui;
}

void PluginManagerWindow::loadPlugins()
{
    qDebug()<< "加载插件";
    /**
     * 加载路径文件夹下的所有插件信息
     */
    // 清楚原有缓存
    for(PluginItem *item : plugins){
        this->ui->m_items->layout()->removeWidget(item);
        item->deleteLater();
    }
    plugins.clear();

    //
    PluginManager &instance = PluginManager::getInstance();
    instance.loadPlugins();     // 重新加载
    const QVector<PluginInfo> pluginInfos = instance.getPlugins();
    for(int i = 0; i < pluginInfos.size(); i++){
        PluginItem *item = new PluginItem();
        item->setPluginInfo(pluginInfos[i]);
        plugins.push_back(item);

        // 监听删除
        connect(item, &PluginItem::deleteItem, this, &PluginManagerWindow::deletePlugin);
    }
    // 更新界面显示
    for(PluginItem *item : plugins){
        this->ui->m_items->layout()->setAlignment(Qt::AlignTop);
        this->ui->m_items->layout()->addWidget(item);
    }
//    QString pluginRootPath = ConfigManager::getInstance().getPluginPath();

//    // 扫描目录下的所有子目录文件夹子
//    QDir rootDir = QDir(pluginRootPath);
//    QFileInfoList fileInfoList = rootDir.entryInfoList(QDir::Dirs);
//    qDebug() << "plugins" << fileInfoList;
//    for(auto fileInfo : fileInfoList){
//        // 加载插件
//        QDir pluginPath = QDir(fileInfo.filePath());
//        // 加载配置文件
//        QString configPath = fileInfo.filePath() + "/" + "config.json";
//        // 解析配置信息
//        if(!Utils::checkFileExists(configPath)){
//            qDebug() << "配置文件不存在" << configPath;
//            continue;
//        }
//        QJsonObject configData = Utils::readJson(configPath);
//        // 读取入口文件位置
//        QString entryFile = fileInfo.filePath() + "/" + configData.value("entry").toString("entry.js"); // 默认入口文件，entry.js
//        if(!Utils::checkFileExists(entryFile)){
//            qDebug() << "插件入口文件不存在" << entryFile;
//            continue;
//        }
//        // 读取插件脚本文件
//        QString content = Utils::readJs(entryFile);
//        PluginInfo pluginInfo;
//        pluginInfo.code = content;
//        pluginInfo.author = configData.value("author").toString("unknown");
//        pluginInfo.description = configData.value("description").toString("unknown");
//        pluginInfo.version = configData.value("version").toString("unknown");
//        pluginInfo.name = configData.value("name").toString("unknown");
//        PluginItem *item = new PluginItem();
//        item->setPluginInfo(pluginInfo);
//        plugins.push_back(item);
//        qDebug() << "插件加载完成： " << pluginInfo.name << "\n code: " << pluginInfo.code;
//    }


}

void PluginManagerWindow::deletePlugin(PluginItem *pluginItem)
{
    // 删除插件文件夹
    QString path = pluginItem->getPluginInfo().filePath;
    qDebug() << "删除插件路径：" << path;
    if(Utils::deleteDir(path)){
        // 插件删除完成
        qDebug() << "插件删除完成";
        loadPlugins();     // 重新加载插件
    }
}

void PluginManagerWindow::on_pushButton_clicked()
{
    loadPlugins();
}



